/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.sistema.db;

import java.sql.*;
import java.util.*;

/**
 *
 * @author Jean
 */
public class Banco {
    //public static String usuario="root";
    //public static String senha="geraldo";
    //public static String url= "jdbc:mysql://localhost/controle_ligacoes";
    public static String driver="com.mysql.jdbc.Driver";

    private Connection c = null;

    public Banco() {
        try {
            LerProperties properties = new LerProperties();

            Class.forName(driver);
            c = DriverManager.getConnection(properties.getUrl(), properties.getUsuario(), properties.getSenha());
        } catch (Exception e) {
            
            e.printStackTrace();

            new MsgErro( "Erro ao Conectar ao banco de dados. Verifique:", e );

            throw new RuntimeException("Erro ao Conectar ao banco de dados. Verifique: \n"+e);
        }
    }

    public void executarAtualizacao(String q) {
        try {
            Statement st = c.createStatement();

            st.executeUpdate(q);
        } catch (Exception e) {
            
            e.printStackTrace();

             new MsgErro( "Erro ao Conectar ao banco de dados. Verifique:", e );

            throw new RuntimeException("Erro ao executar a atualização no banco de dados. Verifique: \n"+e);

        } finally {
            if (c!=null) {
                try {
                    c.close();
                } catch (Exception ee) {
                    //
                }
            }
        }
    }

    public ResultSet executarConsulta(String q) {
        ResultSet rs = null;
        try {
            Statement st = c.createStatement();

            rs = st.executeQuery(q);
        } catch (Exception e) {

            e.printStackTrace();

             new MsgErro( "Erro ao Conectar ao banco de dados. Verifique:", e );

            throw new RuntimeException("Houve ao executar a consulta no banco de dados. Verifique: "+e);
        }

        return rs;
    }

    //Metodo para Verificar o tipo do dado da coluna
    public Vector proximaLinha(ResultSet rs, ResultSetMetaData rsmd) {
        Vector LinhaAtual = new Vector();
        try {
            for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                switch (rsmd.getColumnType(i)) {
                    case Types.VARCHAR:
                        LinhaAtual.addElement(rs.getString(i));
                        break;
                    case Types.TIMESTAMP:
                        LinhaAtual.addElement(rs.getDate(i));

                        break;
                    case Types.NUMERIC:
                        LinhaAtual.addElement(new Long(rs.getLong(i)));
                        break;
                    default:
                        LinhaAtual.addElement(rs.getString(i));
                }
            }
        } catch (SQLException e) {

             new MsgErro( "Erro ao Conectar ao banco de dados. Verifique:", e );
        }
        return LinhaAtual;
    }


    public void fecha() {
        if (c!=null) {
            try {
                c.close();
            } catch (Exception ee) {

                 new MsgErro( "Erro ao Conectar ao banco de dados. Verifique:", ee );
            }

        }
    }

   //Select do Login
    public ResultSet selectLogin( String login, String senha )
    {
        ResultSet rs = null;
        String sql = "SELECT a.id,a.login,a.senha,a.nome,a.setor,b.descricao "
                    + "FROM usuarios a "
                    + "INNER JOIN categoria_usuario b "
                    + "ON a.ref_categoria = b.id "
                    + "WHERE a.login = ? and a.senha = ? ";

        try
        {
            PreparedStatement ps = c.prepareStatement( sql );
            ps.setString( 1, login );
            ps.setString( 2, senha );

            rs = ps.executeQuery();

        }catch( Exception e )
        {
            e.printStackTrace();
        }


        return rs;

    }

    
    public void insertCliente( String descricao, int status )
    {
        String sql = "INSERT INTO clientes (descricao,ref_status,dt_registro) VALUES (?,?,current_date())";

        try
        {

            PreparedStatement ps = c.prepareStatement( sql );
            ps.setString( 1, descricao );
            ps.setInt( 2, status );

            ps.execute();

        }catch( Exception e )
        {
            e.printStackTrace();
        }
    }

    public void updateCliente( int codigo, String descricao, int status )
    {
        String sql = "UPDATE clientes set descricao=?, ref_status=? WHERE id = "+ codigo +"";

        try
        {

            PreparedStatement ps = c.prepareStatement( sql );
            ps.setString( 1, descricao );
            ps.setInt( 2, status );

            ps.execute();

        }catch( Exception e )
        {
            e.printStackTrace();
        }

    }

    public void insertUsuario( String login, String senha, String nome, String setor, int ref_categoria, String ultimo_acesso )
    {
        String sql = "INSERT INTO usuarios (login,senha,nome,setor,ref_categoria,dt_registro,ultimo_acesso) "
                   + "VALUES (?,?,?,?,?,current_date(),?)";

        try
        {

            PreparedStatement ps = c.prepareStatement( sql );
            ps.setString( 1, login );
            ps.setString( 2, senha );
            ps.setString( 3, nome );
            ps.setString( 4, setor );
            ps.setInt( 5, ref_categoria );
            ps.setString( 6, ultimo_acesso );

            ps.execute();

        }catch( Exception e )
        {
            e.printStackTrace();
        }

    }

    public void updateUsuarioAlteraSenha( int codigo, String login, String senha, String nome, String setor, int ref_categoria )
    {
        String sql = "UPDATE usuarios set login=?, senha=?, nome=?, setor=?, ref_categoria=? WHERE id = "+ codigo +"";

        try
        {

            PreparedStatement ps = c.prepareStatement( sql );
            ps.setString( 1, login );
            ps.setString( 2, senha );
            ps.setString( 3, nome );
            ps.setString( 4, setor );
            ps.setInt( 5, ref_categoria );

            ps.execute();

        }catch( Exception e )
        {
            e.printStackTrace();
        }

    }

     public void updateUsuario ( int codigo, String login, String nome, String setor, int ref_categoria )
    {
        String sql = "UPDATE usuarios set login=?, nome=?, setor=?, ref_categoria=? WHERE id = "+ codigo +"";

        try
        {

            PreparedStatement ps = c.prepareStatement( sql );
            ps.setString( 1, login );
            ps.setString( 2, nome );
            ps.setString( 3, setor );
            ps.setInt( 4, ref_categoria );

            ps.execute();

        }catch( Exception e )
        {
            e.printStackTrace();
        }

    }





}
